Variablen-STRUCT in ACTION!

← Zurück zum Forum

Hallo liebe ACTION!-Profis,

ich habe NIO.ACT (Routinen für FujiNet) um die Prozedur "fstatus" erweitert, dort werden 139 Bytes mit diversen Status-Werten zurückgeliefert. Thom hat das auch schon in die offizielle Version übernommen.

Z.B. die interne IP gebe ich dann so aus:

BYTE ARRAY stbuf(139)

PROC status()
    fstatus(stbuf)

    Print("My IP:")
    PrintB(stbuf(97))
    Print(".")
    PrintB(stbuf(98))
    Print(".")
    PrintB(stbuf(99))
    Print(".")
    PrintB(stbuf(100))
    printE("")
RETURN

Was auch funktionert.

Nun finde ich das Hantieren mit den Indizes unschön.

Mit meinem Verständis der Speicherbelegung von ACTION!-Variablen habe ich das nun so gelöst, dass ich den Buffer auf mehrere kleine hintereinander definierte Array aufgeteit habe.

BYTE ARRAY ssid(33)
BYTE ARRAY host(64)
BYTE ARRAY intIp(4)
BYTE ARRAY gateway(4)
BYTE ARRAY netmask(4)
BYTE ARRAY dnsIP(4)
BYTE ARRAY macAdr(6)
BYTE ARRAY bssid(6)
BYTE ARRAY fn_version(15)

PROC status()
    fstatus(ssid)
    Print("SSID:    ") PrintST(ssid,0,33)
    Print("Hostname:") PrintST(host,0,64)

    Print("Int.IP:  ") PrintIP(intIP,4)
    Print("Gateway: ") PrintIP(gateway,4)
    Print("Netmask: ") PrintIP(netmask,4)
    Print("DNS IP:  ") PrintIP(dnsIP,4)
    Print("MacAddr.:") PrintIP(macAdr,6)
    Print("BSSID:   ") PrintIP(bssid,6)
    Print("FujiNet: ") PrintST(fn_version,0,15)
RETURN

Das funktioniert auch: 20221017_202518.jpg Meine Frage nun, ist das eine "legale" Lösung oder geht es hier nur, weil es ein kleines, überschaubares Programm ist?

Anhänge:

ABBUC-Mitglied aus den 90ern/frühen 2000ern Ex-WAF und Regionalgruppe Thüringen

Ja, daran hatte ich auch schon gedacht, aber für TYPE gehen ja nur einfache Variablen, keine Arrays/Strings.

Und mit Pointern wollte ich nicht rumhantieren, da war mir dieser Weg einfacher.

Danke für deine Antwort.

ABBUC-Mitglied aus den 90ern/frühen 2000ern Ex-WAF und Regionalgruppe Thüringen

Hi,

Du kannst auch mal versuchen ob diese Deklarationen funktionieren:

BYTE ARRAY stbuf(139),
           stbuf.ssid(33)=@stbuf,
           stbuf.host(64)=@stbuf.ssid+33,
           stbuf.intIp(4)=@stbuf.host+64,
           ...

Also verschiednen Variablen im Speicher ueberlappend zu definieren.

https://mastodon.social/@cstrotm https://abbuc.social

Leider nein, das bringt Fehler 6. Schade, sah cool aus 😀

ABBUC-Mitglied aus den 90ern/frühen 2000ern Ex-WAF und Regionalgruppe Thüringen